//
//  ViewController.m
//  操作间依赖
//
//  Created by 伍银荣 on 2021/8/31.
//  Copyright © 2021 com.WYR. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic, strong) NSOperationQueue *queue;
@end

/**
   模拟软件升级过程: 下载-->解压-->升级完成
 */

@implementation ViewController

-(NSOperationQueue *)queue {
    if (!_queue) {
        _queue = [[NSOperationQueue alloc]init];
    }
    return _queue;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //下载-->解压-->升级完成  (异步操作)
    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"下载");
    }];
    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"解压");
    }];
    NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"升级完成");
    }];
    //前面这些操作不能保证程序是按照 下载-->解压-->升级完成的顺序执行
    //所以需要设置操作间的依赖,保证程序按照一个顺序执行
    [op2 addDependency:op1];
    [op3 addDependency:op2];
    //错误,会发生循环依赖,导致什么都不执行
    //[op1 addDependency:op3];
    
   //将操作添加到队列中
    [self.queue addOperations:@[op1, op2] waitUntilFinished:NO];
    //将操作3添加到主队列中去执行(说明依赖关系可以跨队列执行)
    [[NSOperationQueue mainQueue] addOperation:op3];
    
}


@end
